// 文件路径: src/main/java/com/ruoyi/chat/service/ChatMessageService.java

package com.reliable.service.service;


import com.reliable.api.dto.chatmessage.ChatMessagePageDTO;
import com.reliable.api.dto.chatmessage.ChatMessageRowForIp;
import com.reliable.api.dto.chatmessage.ChatMessageSessionDTO;
import com.reliable.api.dto.chatmessage.SessionPageTransitionDTO;
import com.reliable.api.dto.chatmessage.SessionPageTransitionPageDTO;
import com.reliable.api.dto.ReliableTaskStatDTO;
import com.reliable.api.dto.largescreen.TotalOverviewData;
import com.reliable.service.domain.ChatMessage;
import com.reliable.service.excel.ChatMessageRow;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.CompletableFuture;

public interface ChatMessageService {
    void save(ChatMessage message);
    List<ChatMessage> findBySessionId(String sessionId);
    List<ChatMessage> findByTaskId(Long taskId);

    void importExcel(MultipartFile file, String taskId) throws Exception;
    
    CompletableFuture<Void> importExcelAsync(MultipartFile file, Long taskId,Long uoloadId) throws Exception;


    // ========== 新增：Excel 导入相关方法 ==========
    void batchInsertChatMessages(List<ChatMessageRow> rows) throws Exception;

    void createPartitionsIfNeeded(LocalDateTime minTime, LocalDateTime maxTime);
    void analyzeAllChatSessions();

    // ChatMessageService.java
    void saveUploadSessionRef(Long uploadId, Set<String> sessionIds) throws Exception;
    
    /**
     * 首页查询接口，通过seesionid和关键字like查询,这两个有其中一个就行
     *
     * @param sessionId 会话ID（可选）
     * @param keyword 关键字（可选）
     * @param pageNum 页码
     * @param pageSize 每页大小
     * @return 聊天记录列表
     */
    List<ChatMessage> findForHomePage(String sessionId, String keyword, Integer pageNum, Integer pageSize);
    
    /**
     * 首页分页查询接口，返回查询结果和总数量
     *
     * @param sessionId 会话ID（可选）
     * @param keyword 关键字（可选）
     * @param pageNum 页码
     * @param pageSize 每页大小
     * @return 包含聊天记录列表和总数量的分页结果
     */
    ChatMessagePageDTO findForHomePageWithTotal(String sessionId, String keyword, Integer pageNum, Integer pageSize);

    /**
     * 通过sessionId查询聊天记录，只返回role、content和时间字段
     *
     * @param sessionId 会话ID
     * @return 聊天记录列表
     */
    List<ChatMessageSessionDTO> findSessionMessages(String sessionId,Integer pageNum, Integer pageSize);

    
    // 总量数据统计相关方法
    TotalOverviewData getTotalOverviewData();


    // 任务数据统计相关方法
    List<ReliableTaskStatDTO> getTaskStatisticsBatch(List<Long> taskIds);
    
    /**
     * 根据任务ID统计独立会话数
     *
     * @param taskId 任务ID
     * @return 独立会话数
     */
    Long countDistinctSessionsByTaskId(Long taskId);


    // IP分析相关方法
    List<ChatMessageRowForIp> getNewMessagesForIpAnalysis(LocalDateTime sinceTime);

    /**
     * 查询具有唯一起始和目标页面的会话记录（带总数）
     *
     * @param referrerUrl 来源页URL（可选）
     * @param pageUrl 对话页URL（可选）
     * @param pageNum 页码
     * @param pageSize 每页大小
     * @return 包含查询结果列表和总数量的分页结果
     */
    SessionPageTransitionPageDTO findUniqueSessionPageTransitionsWithTotal(String referrerUrl, String pageUrl, Integer pageNum, Integer pageSize);


    void importExcelFromFile(File file, String originalFilename, Long taskId);
}